from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Flatten, Dense, Dropout

def classification (batch_size = 20, epochs = 20, img_width = 150,
                    img_height = 150, num_train_samples = 2000, 
                    num_validation_samples = 800):

    model = Sequential()
    model.add(Conv2D(32, (3, 3), activation='relu',
              input_shape=(img_width, img_height, 3)))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Conv2D(48, (3, 3), activation='relu'))
    model.add(Dropout(0.4))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Conv2D(64, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Flatten()) 
    model.add(Dense(64, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))

    model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])
    
    print(model.summary())
    
    history = model.fit(X_train, y_train, validation_data=(X_test,
                        y_test), epochs=epochs, batch_size=batch_size, 
                        verbose=0)
    
    return history
